package cn.baker.rabbitmq.service;

import cn.baker.rabbitmq.entity.TransMessage;

import java.util.List;

/**
 * @author yuanyu
 */
public interface TransMessageService {

    /**
     * 发送前暂存消息
     *
     * @param exchange   交换机
     * @param routingKey 路由key
     * @param body       消息体
     * @return 消息
     */
    TransMessage messageSendReady(String exchange, String routingKey, String body);

    /**
     * 消息发送成功
     *
     * @param id 消息ID
     */
    void messageSendSuccess(String id);

    /**
     * @param id
     * @param exchange
     * @param routingKey
     * @param body
     * @return
     */
    TransMessage messageSendReturn(String id, String exchange, String routingKey, String body);

    /**
     * 消费次数+1
     * @param id
     */
    void messageResend(String id);

    /**
     * 保存监听到的死信消息
     * @param id
     * @param exchange
     * @param routingKey
     * @param queue
     * @param body
     */
    void messageDead(String id, String exchange, String routingKey, String queue, String body);

    /**
     * 删除消息
     *
     * @param id 消息ID
     */
    void messageDead(String id);

    /**
     * @param id
     * @param exchange
     * @param routingKey
     * @param queue
     * @param body
     * @return
     */
    TransMessage messageReceiveReady(String id, String exchange, String routingKey, String queue, String body);

    /**
     * 消息消费成功
     *
     * @param id 消息ID
     */
    void messageReceiveSuccess(String id);

    /**
     * 获取已经发送的消息
     *
     * @return 已经发送的消息集合
     */
    List<TransMessage> listReadyMessages();

}
